/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cx1.service.api;

import java.util.List;
import org.cx1.model.Amenity;
import org.cx1.model.FurnishType;
import org.cx1.model.Listing;
import org.cx1.model.Place;
import org.cx1.model.PropertyType;
import org.cx1.model.StatusType;
import org.cx1.model.utils.ListingFilter;
import org.cx1.model.utils.SearchFilter;
import org.cx1.model.utils.SearchOption;
import org.cx1.model.utils.SearchResult;
import org.cx1.model.utils.ServiceResponse;

/**
 *
 * @author ECH
 */
public interface ISearchService {
    
    public ServiceResponse<List<Listing>> searchListings(SearchOption searchOption);
        
    public ServiceResponse<SearchResult> searchListings2(SearchOption searchOption);
    
    public ServiceResponse<SearchResult> searchListings3(SearchOption searchOption);
    
    public ServiceResponse<SearchResult> searchListings4(SearchOption searchOption);
    
    public ServiceResponse<SearchResult> searchListingsGeo(SearchOption searchOption);
    
    public ServiceResponse<SearchResult> searchPlacesGeo(SearchOption searchOption);
        
    public ServiceResponse<List<Listing>> filterListings(List<Listing> listings, List<Place> places, List<PropertyType> propertyTypes, List<FurnishType> furnishTypes, List<StatusType> statusTypes, List<Amenity> amenities, ListingFilter listingFilter);
    
    public ServiceResponse<List<Listing>> filterByPlace(List<Listing> listings, List<Place> places);
    
    public ServiceResponse<List<Listing>> filterByPropertyType(List<Listing> listings, List<PropertyType> propertyTypes);
    
    public ServiceResponse<List<Listing>> filterByFurnishType(List<Listing> listings, List<FurnishType> furnishTypes);
    
    public ServiceResponse<List<Listing>> filterByStatusType(List<Listing> listings, List<StatusType> statusTypes);
    
    public ServiceResponse<List<Listing>> filterByAmenity(List<Listing> listings, List<Amenity> amenities);
    
    public ServiceResponse<List<Listing>> filterByListingAttributes(List<Listing> listings, ListingFilter listingFilter);
    
    
    /*
    public ServiceResponse<List<Listing>> searchPostings(String searchTerm, SearchFilter searchFilter);
    */
    
}
